#ifndef __EFLAGS_H__
#define __EFLAGS_H__

#include "common.h"

void update_eflags_pf_zf_sf(uint32_t);

static inline bool check_cc_b()//jb指令是小于是跳转指令，比如cmp $eax $ebx,我们会用eax-ebx,如果小于0，CF置为1，同时jb启用跳转，换句话说，jb命令和CF为真是相关的
{
	return cpu.eflags.CF;
}
//下面的几个代码一样
static inline bool check_cc_e()
{
	return cpu.eflags.ZF;
}

static inline bool check_cc_ne()
{
	return !cpu.eflags.ZF;
}

static inline bool check_cc_be()
{
	return cpu.eflags.CF | cpu.eflags.ZF;
}

static inline bool check_cc_a()
{
	return !(cpu.eflags.CF | cpu.eflags.ZF);
}

static inline bool check_cc_s()
{
	return cpu.eflags.SF;
}

static inline bool check_cc_ns()
{
	return !cpu.eflags.SF;
}

static inline bool check_cc_l()
{
	return cpu.eflags.SF ^ cpu.eflags.OF;
}

static inline bool check_cc_ge()
{
	return !(cpu.eflags.SF ^ cpu.eflags.OF);
}

static inline bool check_cc_le()
{
	return (cpu.eflags.SF ^ cpu.eflags.OF) | cpu.eflags.ZF;
}

static inline bool check_cc_g()
{
	return !((cpu.eflags.SF ^ cpu.eflags.OF) | cpu.eflags.ZF);
}

#endif
